package com.itheima.chap05;

import com.itheima.chap03.Product;

public class InterfaceDemo {
    public static void main(String[] args) {
        Product product = Product.createPhysicalProduct("华为Mate70",  7299.00,  672.00);

        Counpon counpon = new PriceDiscountCoupon(10000, 1000);

        Order order = new Order(product, 2,counpon);

        order.showOrderInfo();

        System.out.println("--------------------------------------------");

        Counpon counpon1 = new RateDiscountCoupon(90000, 85);

        order.setCoupon(counpon1);
        // 好处：可以在程序运行的时候不断地取去修改这个注入的对象（而构造注入注入后就不能变化了）
        order.showOrderInfo();
    }
}

// 笔记
//1. 接口和类的关系
//  接口：定义要做什么（what），可以看作是协议的制定者，尽量不变化
//  类：定义怎么做（how），可以看作是协议的履行者
//2. 什么是依赖注入：类不再创建它所依赖的对象，而是由其他类提供并且注入这些依赖项
//3. 依赖注入的方法：
//  构造方法
//  setter注入